热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

声道|波形_音视频开发成长之路与音视频知识总结

篇首语:本文由编程笔记#小编为大家整理,主要介绍了音视频开发成长之路与音视频知识总结相关的知识,希望对你有一定的参考价值。 音视频涉及语音信号处理、数字图像处理、信息论、

篇首语:本文由编程笔记#小编为大家整理,主要介绍了音视频开发成长之路与音视频知识总结相关的知识,希望对你有一定的参考价值。


 音视频涉及语音信号处理、数字图像处理、信息论、封装格式、编解码、流媒体协议、网络传输、渲染、算法等。在现实生活中,音视频扮演着越来越重要的角色,比如视频会议、直播、短视频、播放器、语音聊天等。因此,从事音视频是一件比较有意义的事情,机遇与挑战并存。本文将从几个维度进行介绍:音视频开发基础、音视频进阶成长、音视频工作方向、音视频开源库、流媒体协议与书籍。


一、音视频开发基础


1、音频基础

音频包括:采样率、声道数与声道布局、采样格式、PCM与波形图、音质、音频编码格式、音频封装格式。更详细的音视频概念,可参考:走进音视频的世界——音视频的基本概念。


2、通用基础

通用包括:编码原理、C/C++基础、视频分析工具、FFmpeg常用命令、平台相关多媒体API。


3、视频基础

视频包括:帧率、码率、分辨率、像素格式、色彩空间、I帧P帧B帧、DTS与PTS、YUV与RGB、位深与色域、视频编码格式、视频封装格式。具体如下图所示:



二、音视频进阶成长


1、音频进阶

音视频进阶成长也是分为:音频、通用、视频。其中音频包括:录音、麦克风采集、音频编解码、音频播放、音频分析、音效。


2、通用进阶

通用包括:熟悉流媒体协议、音视频传输、音视频同步播放、平台相关多媒体运用、FFmpeg相关API运用、OpenGL渲染、音视频编辑。


3、视频进阶

视频包括:录像、摄像头采集、视频编解码、视频播放、滤镜特效、视频转码。在熟悉音视频基础上深入学习,如下图所示:



三、音视频工作方向

相信很多伙伴在音视频工作方向这个十字路口,有过徘徊、迷茫。个人建议是选择自己喜欢的方向,如果还没找到自己所爱,努力去寻找,借用雷总的话“不要害怕做出选择”。一旦做出选择,就要把工作当做事业,不仅仅是为了工作而工作,借用乔布斯的话“Do what you love, love what you do”。把音视频工作方向总结为9个(可能不够准确,仅是个人观点):直播、传输、算法、视频播放器、流媒体后端、短视频、音频播放、视频编辑、图像处理。具体方向如下:



四、音视频开源库


1、多媒体处理

多媒体处理包括:FFmpeg、libav、Gstreamer。其中FFmpeg是目前最常用的音视频处理库,包括封装格式、编解码、滤镜、图像缩放、音频重采样等模块。


2、流媒体传输

流媒体传输包括WebRTC、live555。其中WebRTC是目前最常用的RTC库,比较著名的模块有JitterBuffer、NetEQ、pacer、网络带宽估计。


3、播放器

播放器包括:ijkplayer、exoplayer、vlc。其中ijkplayer是B站开源的跨平台播放器,exoplayer是Google开源的android平台播放器,vlc属于VideoLAN非盈利组织所开源。


4、编解码

常用的编解码包括:aac、mp3、opus、vp9、x264、av1。其中aac一般用于点播、短视频,opus用于RTC直播。vp9是Google开源的编码器,VideoLAN有提供x264编码器,av1是AOMedia(开放媒体联盟)开源的新一代视频编码器。


5、音频处理

音频处理的开源库包括:sox、soundtouch、speex。其中sox称为音频处理界的瑞士军刀,可以做各种音效、提供各种滤波器。soundtouch用于变速变调、变速不变调。speex严格意义上讲,它是一个编码器,但是它有丰富的音频处理模块:PLC(丢包隐藏)、VAD(静音检测)、DTX(非连续传输)、AEC(回声消除)、NS(噪声抑制)。


6、流媒体服务器

流媒体服务器主流的有:SRS、janus。其中SRS是一款简单高效的视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT。而janus是MeetEcho公司开源的基于WebRTC的流媒体服务器,严格意义上讲它是一个网关。


7、音视频分析

做音视频开发绕不开分析工具,掌握使用分析工具至关重要。常用的音视频分析工具包括但不限于:Mp4Parser、VideoEye、Audacity。其中Mp4Parser用于分析mp4格式及其结构。VideoEye是雷神开源的基于Windows平台分析视频码流工具(在此致敬雷神的开源精神)。Audacity是一款开源的音频编辑器,可用于添加各种音效、分析音频波形图。


8、视频渲染

视频渲染相关开源库有:GPUImage、Grafika、LearnOpenGL。其中GPUImage可用于添加各种滤镜特效。Grafika是Google一位工程师开源的基于Android平台渲染示例库。LearnOpenGL主要是配套其网站的学习OpenGL教程。


相关的开源网站与地址如下:


FFmpeghttps://ffmpeg.org/
WebRTChttps://webrtc.org.cn/
RTC社区https://rtcdeveloper.agora.io/
RFC协议https://www.rfc-editor.org/rfc/
OpenGLhttps://learnopengl-cn.github.io/
GPUImagehttps://github.com/BradLarson/GPUImage
VideoLanhttps://www.videolan.org/projects/
AOMediahttps://aomedia.org/
xiph.orghttps://gitlab.xiph.org/
VP9https://www.encoding.com/vp9/
soundtouchhttp://soundtouch.surina.net/
soxhttp://sox.sourceforge.net/

五、流媒体协议


1、流媒体传输协议

常见的流媒体传输协议有:RTP、SRTP、RTMP、RTSP、RTCP等。其中RTP(Real-time Transport Protocol)是实时传输协议,而SRTP是安全实时传输协议,即在RTP基础上加密传输,防止音视频数据被窃取。RTMP(Real Time Messaging Protocol)是Adobe开源的实时消息传输协议,基于TCP,基本协议包括:RTMPE、RTMPS、RTMPT。RTSP(Real Time Streaming Protocol)是实时流传输协议,字段包括:OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN等。RTCP(RTP Control Protocol)是RTP传输控制协议,用于统计丢包、发送延时。


2、流媒体应用协议

流媒体应用协议有:HLS、DASH。其中HLS是Apple公司开源的流媒体传输应用协议,同时涉及m3u8协议和ts流。而DASH是Google在广泛运用的流媒体协议,使用fmp4切片,支持自适应码率、多码率的无缝切换。


3、WebRTC信令协议

WebRTC信令协议有:SDP、ICE、NAT、STUN、TURN。当然,WebRTC的网络传输协议也有用到上面提及的流媒体传输协议。


4、音视频编码协议

常用的音频编码协议有:MP3、AAC、OPUS、FLAC、AC3、EAC3、AMR_NB、PCM_S16LE。视频编码协议有:H264、HEVC、VP9、MPEG4、AV1等。相关的音视频编解码协议,可参考:走进音视频的世界——音视频编码和走进音视频的世界——音视频解码。


5、音视频封装格式

常用的视频封装格式有:mp4、mov、mkv、webm、flv、avi、ts、mpg、wmv等。常用的音频封装格式有:mp3、m4a、flac、ogg、wav、wma、amr等。封装格式是多媒体容器,包含多媒体信息、音视频码流。其中多媒体信息包括:时长、分辨率、帧率、码率、采样率、声道数等等,即上面提及的音视频开发基础的相关概念。而音视频码流是原始数据经过编码压缩得到的若干帧组成的stream,字幕码流一般是由特定格式的文本或位图组成。关于封装格式,可以参考以前写过的文章:走进音视频的世界——音频封装格式和走进音视频的世界——视频封装格式。

以上涉及的协议具体如下:


流媒体传输RTP(rfc3550)
SRTP(rfc3711)
RTMP(adobe)
RTSP(rfc7826)
RTCP(rfc5506)
流媒体应用HLS(rfc8216)
DASH(iso23009)
WebRTC协议SDP(rfc3264)
ICE(rfc5245)
NAT
TURN
STUN
编码协议aac、mp3、opus、ac3等
h264、h265、vp9、av1等
封装格式mp3、m4a、ogg、wav等
mp4、mkv、flv、ts、avi等

六、音视频书籍


1、音频类

音频书籍包括:The music of theory、DSP noise reduction、Audio Signal Process and Coding、数字音频原理及应用、音频信号处理与编码等。


2、视频类

视频书籍包括:数字图像与视频处理、音视频开发进阶指南、视频编码全角度详解、新一代视频压缩编码标准H.264/AVC、新一代高效视频编码H.265/HEVC、数字图像处理(冈萨雷斯版)、多媒体信号编码与传输、OpenGL编程指南、WebRTC native开发实战、FFmpeg从入门到精通、在线视频技术精要等。


3、语言类

关于C/C++相关书籍包括:C语言程序设计、C++编程思想、C++ Primmer Plus、C++程序设计语言、Effective C++。另外推荐的是《程序员的自我修养》。相关书本可参考以前写的博客:那些年曾经看过的书。

希望各位伙伴在音视频道路上不断成长,怀着一颗热爱技术的心,守护自己的梦想。像乔布斯在斯坦福大学演讲所说“Stay hungry, stay foolish”。


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 几何画板展示电场线与等势面的交互关系
    几何画板是一款功能强大的物理教学软件,具备丰富的绘图和度量工具。它不仅能够模拟物理实验过程,还能通过定量分析揭示物理现象背后的规律,尤其适用于难以在实际实验中展示的内容。本文将介绍如何使用几何画板演示电场线与等势面之间的关系。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
author-avatar
政哲俊其舒涵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有